home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gold Medal Software 3
/
Gold Medal Software - Volume 3 (Gold Medal) (1994).iso
/
prog
/
grafix2.arj
/
DEMO.BAS
< prev
next >
Wrap
BASIC Source File
|
1993-11-13
|
26KB
|
820 lines
$LIB IPRINT OFF, GRAPH ON, LPT OFF, COM OFF, FULLFLOAT OFF
DEFINT A-Z
shared greytop, greyleft, greybott,greyright
Shared RedLeft, RedRight, RedTop, RedBott
Shared BlueLeft, BlueRight, BlueTop, BlueBott
Shared YellowLeft, YellowRight, YellowTop, YellowBott
Shared GN, RN, BN
REDIM C(1)
DIM TP$(20)
SHARED TP$()
SHELL "PBLOGO.EXE" ' ...........................Jim St.Louis' logo program
SCREEN 12
BLACKOUT '......................................set color palette to black
RANDOM.VIDEO.EFFECT '...........................................draw pattern
PCMAG '...............................................show pc magazine logo
PALETTE '...................................................activate colors
CWAIT .05
COPYRIGHT '................................................copyright screen
CWAIT .05
LOGO '...............................................pb ide screen and logo
CWAIT .05
INTRO '.....................................................intro paragraph
CWAIT .1
'' between each statement here, show a mono screen with a step-highlight bar
'' on the source code ???
TSR.TOPIC
ASM.TOPIC
DAT.TOPIC
ARR.TOPIC
MAT.TOPIC
MSC.TOPIC
COM.TOPIC
IDE.TOPIC
HEL.TOPIC
ADD.TOPIC
' ++++++++++++++++++++++++++ SUBROUTINES FOLLOW ++++++++++++++++++++++
SUB SaveScreen12(R$, G$, B$, I$)
DEF SEG = &HA000
OUT &H3CE, 4: OUT &H3CF, 0:B$=PEEK$(0,32000)
OUT &H3CE, 4: OUT &H3CF, 1:G$=PEEK$(0,32000)
OUT &H3CE, 4: OUT &H3CF, 2:R$=PEEK$(0,32000)
OUT &H3CE, 4: OUT &H3CF, 3:I$=PEEK$(0,32000)
OUT &H3CE, 4: OUT &H3CF, 0:
DEF SEG
END SUB
SUB RestoreScreen12(R$, G$, B$, I$)
DEF SEG = &HA000
OUT &H3C4, 2: OUT &H3C5, 1: POKE$ 0,B$
OUT &H3C4, 2: OUT &H3C5, 2: POKE$ 0,G$
OUT &H3C4, 2: OUT &H3C5, 4: POKE$ 0,R$
OUT &H3C4, 2: OUT &H3C5, 8: POKE$ 0,I$
OUT &H3C4, 2: OUT &H3C5, &HF: DEF SEG
END SUB
SUB PUTSCREEN (Fi$)
OPEN Fi$ FOR OUTPUT AS #11
DEF SEG = &HA000
OUT &H3CE, 4: OUT &H3CF, 2:R$=PEEK$(0,32000)
PRINT #11, R$;
OUT &H3CE, 4: OUT &H3CF, 1:r$=PEEK$(0,32000)
PRINT #11, R$;
OUT &H3CE, 4: OUT &H3CF, 0:r$=PEEK$(0,32000)
PRINT #11, R$;
OUT &H3CE, 4: OUT &H3CF, 3:r$=PEEK$(0,32000)
PRINT #11, R$;
OUT &H3CE, 4: OUT &H3CF, 0:
DEF SEG
CLOSE #11
END SUB
SUB GETSCREEN (Fi$)
OPEN Fi$ FOR BINARY AS #11
GET$ #11, 32000, R$
GET$ #11, 32000, G$
GET$ #11, 32000, B$
GET$ #11, 32000, I$
CLOSE #11
DEF SEG = &HA000
OUT &H3C4, 2: OUT &H3C5, 1: POKE$ 0,B$
OUT &H3C4, 2: OUT &H3C5, 2: POKE$ 0,G$
OUT &H3C4, 2: OUT &H3C5, 4: POKE$ 0,R$
OUT &H3C4, 2: OUT &H3C5, 8: POKE$ 0,I$
OUT &H3C4, 2: OUT &H3C5, &HF: DEF SEG
END SUB
SUB GETSCREEN2 (Fi$)
OPEN Fi$ FOR BINARY AS #11
GET$ #11, 32000, R$
GET$ #11, 32000, G$
GET$ #11, 32000, B$
GET$ #11, 32000, I$
CLOSE #11
DEF SEG = &HA000
OUT &H3C4, 2: OUT &H3C5, 1: POKE$ 2560,B$
'delay .1
OUT &H3C4, 2: OUT &H3C5, 2: POKE$ 2560,G$
'delay .1
OUT &H3C4, 2: OUT &H3C5, 4: POKE$ 2560,R$
'delay .1
OUT &H3C4, 2: OUT &H3C5, 8: POKE$ 2560,I$
OUT &H3C4, 2: OUT &H3C5, &HF: DEF SEG
END SUB
SUB GETSCREEN3(Fi$)
OPEN Fi$ FOR BINARY AS #11
GET$ #11, 32000, R$:R$=LEFT$(R$,19000)
GET$ #11, 32000, G$:G$=LEFT$(G$,19000)
GET$ #11, 32000, B$:B$=LEFT$(B$,19000)
GET$ #11, 32000, I$:I$=LEFT$(I$,19000)
CLOSE #11
DEF SEG = &HA000
OUT &H3C4, 2: OUT &H3C5, 1: POKE$ 2400,B$
OUT &H3C4, 2: OUT &H3C5, 2: POKE$ 2400,G$
OUT &H3C4, 2: OUT &H3C5, 4: POKE$ 2400,R$
OUT &H3C4, 2: OUT &H3C5, 8: POKE$ 2400,I$
OUT &H3C4, 2: OUT &H3C5, &HF: DEF SEG
END SUB
SUB CWAIT (DelayFactor!)
REDIM s%(20000)
REDIM c%(9999)
REDIM d%(9999)
DEF SEG = VARSEG(c%(0))
BLOAD "CLOCK.PIC",0
GET (50,440)-(590,440+C%(1)),s%
LINE (50,440)-(590,440+C%(1)),1,BF
n=4
CPRINT 29,10,9,1,"Esc - Abort SPACEBAR = PAUSE Any - Next"
GET (55-n,440)-(55+c%(0),440+c%(1)),d%
FOR i%=55 TO 590-c%(0) STEP n
PUT (i%-n,440),d%,PSET
A$=INKEY$
IF A$=" " THEN DO:A$=INKEY$:LOOP UNTIL LEN(A$):IF A$=" " THEN A$=""
IF A$=CHR$(27) THEN END
'LINE (i%,445)-(i%,465),9
GET (i%,440)-(i%+c%(0),440+c%(1)),d%
PUT (i%,440),c%,OR
DELAY DelayFactor!
IF LEN(A$) THEN EXIT FOR
NEXT i
PUT (50,440),s%,PSET
END SUB
sub Yellowbox(byval y1, byval x1, byval y2,byval x2)
YellowTop=Y1
YellowLeft=X1
YellowBott=Y2
YellowRight=X2
y1=(y1-1)*16-16:y2=(y2-1)*16+16:x1=(x1-1)*8-16:x2=(x2-1)*8+16
fil=7:fg=15:bg=8:dv=5
line(x1+dv,y1+dv)-(x2,y2),fil,bf
for i=0 to dv-1:line(dv+i+x1,(dv+1)+i+y1)-(dv+i+x1,dv-i+y2),fg:next i
for i=0 to dv-1:line(dv-i+x2,(dv+1)+i+y1)-(dv-i+x2,dv-i+y2),bg:next i
for i=0 to dv-1:line(dv+i+x1,dv+i+y1)-(dv-i+x2,dv+i+y1),fg:next i
for i=0 to dv-1:line(dv-i+dv+x1,i+y2+1)-(dv+i-dv+x2,i+y2+1),bg:next i
end sub
sub bluebox(byval y1, byval x1, byval y2,byval x2)
BlueTop=Y1
BlueLeft=X1
BlueBott=Y2
BlueRight=X2
y1=(y1-1)*16-16:y2=(y2-1)*16+16:x1=(x1-1)*8-16:x2=(x2-1)*8+16
fil=1:fg=9:bg=8:dv=5
line(x1+dv,y1+dv)-(x2,y2),fil,bf
for i=0 to dv-1:line(dv+i+x1,(dv+1)+i+y1)-(dv+i+x1,dv-i+y2),fg:next i
for i=0 to dv-1:line(dv-i+x2,(dv+1)+i+y1)-(dv-i+x2,dv-i+y2),bg:next i
for i=0 to dv-1:line(dv+i+x1,dv+i+y1)-(dv-i+x2,dv+i+y1),fg:next i
for i=0 to dv-1:line(dv-i+dv+x1,i+y2+1)-(dv+i-dv+x2,i+y2+1),bg:next i
end sub
sub redbox(byval y1, byval x1, byval y2,byval x2)
RedTop=Y1
RedLeft=X1
RedBott=Y2
RedRight=X2
y1=(y1-1)*16-16:y2=(y2-1)*16+16:x1=(x1-1)*8-16:x2=(x2-1)*8+16
fil=4:fg=12:bg=6:dv=5
line(x1+dv,y1+dv)-(x2,y2),fil,bf
for i=0 to dv-1:line(dv+i+x1,(dv+1)+i+y1)-(dv+i+x1,dv-i+y2),fg:next i
for i=0 to dv-1:line(dv-i+x2,(dv+1)+i+y1)-(dv-i+x2,dv-i+y2),bg:next i
for i=0 to dv-1:line(dv+i+x1,dv+i+y1)-(dv-i+x2,dv+i+y1),fg:next i
for i=0 to dv-1:line(dv-i+dv+x1,i+y2+1)-(dv+i-dv+x2,i+y2+1),bg:next i
end sub
sub CPrint(row%,col%,fc%,bc%, text$) static
'This routine sets the background Block Color
c$=string$(len(text$),219)
reg 1,&h1300
reg 2,bc%:reg 3,len(text$)
reg 4,256*(row%-1)+(col%-1)
reg 9,strseg(c$)
reg 7,strptr(c$)
call interrupt &h10
'This routine XOR's on the forground character color.
reg 1,&h1300
reg 2,(fc% xor bc%) + &h80
reg 3,len(text$)
reg 4,256*(row%-1)+(col%-1)
reg 9,strseg(text$)
reg 7,strptr(text$)
call interrupt &h10
end sub
SUB YellowMESSAGE (byval X$)
IF LEFT$(X$,1)="+" THEN gN=0:X$=MID$(X$,2):YellowBOX YellowTop, YellowLeft, YellowBott, YellowRight
IF YellowTop + GN>YellowBott then GN=0
l=(YellowRight-Yellowleft)+1
IF LEN(X$)>L THEN X$=LEFT$(X$,L)
X$=SPACE$((L-LEN(X$))\2)+X$
CPRINT Yellowtop+gn, YellowLeft, 8,7,X$
INCR GN
END SUB
SUB RANDOM.VIDEO.EFFECT
i=480
j=0
n=1
do
decr i,n
incr j,n
if i<240 then exit loop
line (0,i) - (639,i), 9
line (0,j) - (639,j), 9
incr x:if x=3 then x=0:incr n
loop
For i=639 TO 0 STEP -5
LINE (639-i,0) - (i,479) , 3
NEXT i
END SUB
SUB SavePartScreen(x1,y1,x2,y2,a())
X = x2-x1+1
Y = y2-y1+1
B = 4 + CEIL(X/8)*4*Y
REDIM a(b)
Get (x1,y1)-(x2,y2),a
END SUB
SUB RestorePartscreen(x1,y1,a())
PUT (x1,y1),a,pset
END sub
SUB PCMAG
dim ary1%(32000)
dim ary2%(32000)
def seg=varseg(ary1%(0))
bload "ED1",0
def seg
def seg=varseg(ary2%(0))
bload "ED2",0
def seg
put(148,57),ary1%,pset
put(148,223),ary2%,pset
END SUB
SUB GETPIC(F$, x%, y%)
DIM A%(32700)
DEF SEG = VARSEG(A%(0))
BLOAD F$, 0
PICBOX x%, y%, x%+A%(0), y%+A%(1)
PUT (X%, Y%),A%
END SUB
SUB CENTERPIC(F$)
DIM A%(32700)
DEF SEG = VARSEG(A%(0))
BLOAD F$, 0
x%=319 - (A%(0)\2)
y%=200 - (A%(1)\2)
PICBOX x%, y%, x%+A%(0), y%+A%(1)
PUT (X%, Y%),A%
END SUB
SUB LOWERPIC(F$)
DIM A%(32700)
DEF SEG = VARSEG(A%(0))
BLOAD F$, 0
x%=319 - (A%(0)\2)
y%=330 - (A%(1)\2)
PICBOX x%, y%, x%+A%(0), y%+A%(1)
PUT (X%, Y%),A%
END SUB
sub picbox(byval x1, byval y1, byval x2,byval y2)
fil=8:fg=15:bg=8:dv=5
decr x1,10:decr y1,10
decr x2:decr y2
line(x1+dv,y1+dv)-(x2,y2),fil,bf
for i=0 to dv-1:line(dv+i+x1,(dv+1)+i+y1)-(dv+i+x1,dv-i+y2),fg:next i
for i=0 to dv-1:line(dv-i+x2,(dv+1)+i+y1)-(dv-i+x2,dv-i+y2),bg:next i
for i=0 to dv-1:line(dv+i+x1,dv+i+y1)-(dv-i+x2,dv+i+y1),fg:next i
for i=0 to dv-1:line(dv-i+dv+x1,i+y2+1)-(dv+i-dv+x2,i+y2+1),bg:next i
end sub
SUB TYPEIN (Row%,X$)
REPLACE "`" WITH CHR$(34) IN X$
TP$(Row%)=X$
FOR Col%=2 TO LEN(X$)+1
CPRINT Row%+4, Col%, 7,0,MID$(X$,Col%-1,1)
IF MID$(X$, Col%-1,1)<>" " THEN
CPRINT Row%+4, Col%+1, 7,0,"_"
'SOUND 400,.1
'SOUND 100,.1
'SOUND 50,.1
'DELAY .01
CPRINT Row%+4, Col%+1, 7,0," "
END IF
NEXT Col%
'IF X$<>"" THEN
'SOUND 1000,.1
'FOR y%=1 TO 2
'CPRINT Row%+5, 2, 7,0,"_"
'DELAY .1
'CPRINT Row%+5, 2, 7,0," "
'DELAY .1
'NEXT y%
'END IF
END SUB
SUB HILITE(Row%)
CPRINT Row%+4, 2, 15, 12, TP$(Row%)
END SUB
SUB LOLITE(Row%)
CPRINT Row%+4, 2, 7, 0, TP$(Row%)
END SUB
SUB IDEPIC (n%)
OPEN "COORD."+mid$(str$(n%),2) FOR INPUT AS #1
INPUT #1, x%, y%
CLOSE #1
y%=y%+32
REDIM Temp%(32700)
DEF SEG=VARSEG(Temp%(0))
BLOAD "IDEMENU."+mid$(str$(n%),2),0
PUT (x%, y%),Temp%,PSET
END SUB
SUB BLACKOUT
DIM BlackPal%(15)
FOR P%=0 TO 15:BlackPal%(P%)=0:NEXT P%
PALETTE USING BlackPal%(0)
END SUB
SUB COPYRIGHT
LINE (50,50)-(590,430),3,BF
bluebox 8,25,22,55
CPRINT 10,27,14,1," PowerBASIC Compiler"
CPRINT 12,27,09,1," Version 3.00"
CPRINT 14,27,09,1,"Copyright (C) 1989-1993 by"
CPRINT 16,27,09,1," Robert Zale"
CPRINT 18,27,09,1," PowerBASIC Inc."
CPRINT 20,27,09,1," Brentwood, CA, USA"
END SUB
SUB LOGO
CPRINT 1,1,9,1," PowerBASIC 3.0 * Not your basic BASIC * Comdex demo (C) 1993 PowerBASIC Inc. "
GETSCREEN2 "IDE.12" 'a slightly modified version of GETSCREEN
centerpic "PB.PIC" ' LOGO
END SUB
SUB INTRO
GETSCREEN2 "IDE.12"
centerpic "SCRIPT1.PIC" ' INTRO
END SUB
SUB TSR.TOPIC
' ********************************************************************
' TSR TOPIC
' ********************************************************************
GETSCREEN2 "IDE.12"
centerpic "SCRIPT2.PIC" ' PB CREATES TSR'S
CWAIT .3
GETSCREEN2 "IDE.12"
TYPEIN 1,"Dummy& = SETMEM(-640000) ' adjust memory"
TYPEIN 2,"Dummy& = SETMEM(+4096)
TYPEIN 3,"" 'blank lines are necessary for highlighter subroutine.
'if you don't specify a line is blank it will not clear
'highlighter memory and an old line may show through
TYPEIN 4,"POPUP KEY CHR$(8,1,&H70) ' pop up on ALT-ESC"
TYPEIN 6,"DO"
TYPEIN 7,""
TYPEIN 8," POPUP SLEEP USING EMS, `C:\SWAP.$$$`"
TYPEIN 9,""
TYPEIN 10," PRINT `Hello there, I'm a TSR!`"
TYPEIN 11,""
TYPEIN 12,"LOOP"
HILITE 1
HILITE 2
YELLOWBOX 17,20,17,62
YELLOWMESSAGE "+Use SETMEM to set memory requirements"
CWAIT .05
LOLITE 1
LOLITE 2
HILITE 4
YELLOWMESSAGE "+Set method of POPUP. Here we use a hot key"
CWAIT .05
LOLITE 4
HILITE 6
HILITE 12
YELLOWMESSAGE "+Place a loop around the important code"
CWAIT .05
LOLITE 6
LOLITE 12
HILITE 8
YELLOWMESSAGE "+Program goes resident here to a 5K kernel"
CWAIT .05
LOLITE 8
HILITE 10
YELLOWMESSAGE "+...And this is what our TSR program does!"
CWAIT .05
END SUB
SUB ASM.TOPIC
' ********************************************************************
' ASSEMBLY LANGUAGE TOPIC
' ********************************************************************
'Here:
GETSCREEN2 "IDE.12"
centerpic "SCRIPT3.PIC" ' BUILT IN ASSEMBLY LANGUAGE
CWAIT .3
GETSCREEN2 "IDEZOOM.12"
YELLOWBOX 27,10,27,70
YELLOWMESSAGE "+Inline assembly language makes ASM integration a breeze"
TYPEIN 1," FUNCTION SumInteger&(x%,y%)"
TYPEIN 2," LOCAL temp& ' a place to save the result"
TYPEIN 3," ASM push ds ; ds must be preserved"
TYPEIN 4," ASM xor ax, ax ; zero the low-order result"
TYPEIN 5," ASM xor dx, dx ; zero the high-order result"
TYPEIN 6," ASM lds bx, y% ; get a pointer to the count"
TYPEIN 7," ASM mov cx, [bx] ; cx = count of array elements"
TYPEIN 8," ASM lds bx, x% ; ds:[bx] = pointer to element 1"
TYPEIN 9," ASM jcxz sum2 ; in case of no elements"
TYPEIN 10," SUM1:"
TYPEIN 11," ASM add ax, ds:[bx] ; add in one integer"
TYPEIN 12," ASM adc dx, 0 ; account for integer overflow"
TYPEIN 13," ASM add bx, 2 ; point to the next integer"
TYPEIN 14," ASM loop sum1 ; repeat as needed"
TYPEIN 15," SUM2:"
TYPEIN 16," ASM pop ds ; restore the caller's register"
TYPEIN 17," ASM mov temp&[00], ax ; save the low-order result"
TYPEIN 18," ASM mov temp&[02], dx ; save the high-order result"
TYPEIN 19," SumInteger& = temp& ; transfer it to the Basic var"
TYPEIN 20," END FUNCTION"
HILITE 6:HILITE 8:HILITE 9:HILITE 14:HILITE 17:HILITE 18
YELLOWMESSAGE "+Access BASIC labels and variables directly in ASM statements"
CWAIT .1
LOLITE 6:LOLITE 8:LOLITE 9:LOLITE 14:LOLITE 17:LOLITE 18
YELLOWMESSAGE "+Single-step and trace each ASM statement just like BASIC"
FOR A=1 TO 20:HILITE A:DELAY .2:LOLITE A:NEXT A
IDEPIC 13:IDEPIC 14 ' get register display
YELLOWBOX 27,10,27,70
YELLOWMESSAGE "+The debugging environment even offers full CPU register watch"
CWAIT .1
END SUB
SUB DAT.TOPIC
GETSCREEN2 "IDE.12"
centerpic "SCRIPT4.PIC"
CWAIT .2
GETSCREEN2 "IDEZOOM.12"
TYPEIN 1, " Variable type char size 64K array DEF- Keyword "
TYPEIN 2, " --------------------------------------------------------------------------"
TYPEIN 3, " Integers "
TYPEIN 4, " Integer % 2 32,767 DEFINT INTEGER "
TYPEIN 5, " Long integer & 4 16,383 DEFLNG LONG "
TYPEIN 6, " Quad integer && 8 8,191 DEFQUD QUAD "
TYPEIN 7, " Unsigned integers "
TYPEIN 8, " Byte ? 1 65,535 DEFBYT BYTE "
TYPEIN 9, " Word ?? 2 32,767 DEFWRD WORD "
TYPEIN 10," Double Word ??? 4 16,383 DEFDWRD DWORD "
TYPEIN 11," Floating point "
TYPEIN 12," Single ! 4 16,383 DEFSNG SINGLE "
TYPEIN 13," Double # 8 8,191 DEFDBL DOUBLE "
TYPEIN 14," Extended ## 10 6,553 DEFEXT EXT "
TYPEIN 15," BCD fixed @ 8 8,191 DEFFIX FIX "
TYPEIN 16," BCD floating @@ 10 6,553 DEFBCD BCD "
TYPEIN 17," Strings "
TYPEIN 18," String $ 2 32,767 DEFSTR STRING "
TYPEIN 19," Flex String $$ 2 32,767 DEFFLX FLEX "
TYPEIN 20," Fixed-Length N/A (depends on size) STRING * x"
YELLOWBOX 27,9,27,71
HILITE 8:HILITE 9:HILITE 10
YELLOWMESSAGE "+Unsigned integers! A first for PowerBASIC"
CWAIT .05
LOLITE 8:LOLITE 9:LOLITE 10
HILITE 12:HILITE 13:HILITE 14:HILITE 15:HILITE 16
YELLOWMESSAGE "+PowerBASIC offers an extended set of floating point data types"
CWAIT .05
LOLITE 12:LOLITE 13:LOLITE 14:LOLITE 15:LOLITE 16
HILITE 19
YELLOWMESSAGE "dynamic structures that can be allocated on the fly or erased"
CWAIT .05
LOLITE 19
CENTERPIC "SCRIPT5.PIC"
CWAIT .2
GETSCREEN2 "IDE.12"
TYPEIN 1,""
TYPEIN 2," TYPE XModemPacketType"
TYPEIN 3," SOH AS BYTE"
TYPEIN 4," BLK AS BYTE"
TYPEIN 5," NEG AS BYTE"
TYPEIN 6," DAT AS STRING * 128"
TYPEIN 7," CRC AS WORD"
TYPEIN 8," END TYPE"
TYPEIN 9,""
TYPEIN 10," UNION XModemUnion"
TYPEIN 11," Packet AS XmodemPacketType"
TYPEIN 12," Block AS STRING * 133"
TYPEIN 13," END UNION"
TYPEIN 14,""
TYPEIN 15," DIM XModem AS XModemUnion"
YELLOWBOX 27,9,27,71
HILITE 2:HILITE 3:HILITE 4:HILITE 5:HILITE 6:HILITE 7:HILITE 8
YELLOWMESSAGE "+User defined data structures"
CWAIT .05
LOLITE 2:LOLITE 3:LOLITE 4:LOLITE 5:LOLITE 6:LOLITE 7:LOLITE 8
HILITE 10:HILITE 11:HILITE 12:HILITE 13
YELLOWMESSAGE "+User defined UNIONs of data types and data structures"
CWAIT .05
LOLITE 10:LOLITE 11:LOLITE 12:LOLITE 13
END SUB
SUB ARR.TOPIC
' ********************************************************************
' ARRAY OPERATIONS
' ********************************************************************
GETSCREEN2 "IDE.12"
centerpic "SCRIPT6.PIC"
CWAIT .1
GETSCREEN2 "IDEZOOM.12"
TYPEIN 1," DIM DoubleArray#(100)"
TYPEIN 2," DIM A(10000) AS INTEGER"
TYPEIN 3,""
TYPEIN 4," DIM HUGE B$(10000)"
TYPEIN 5,""
TYPEIN 6," DIM ABSOLUTE BDA%(1024) AT 0"
TYPEIN 7,""
TYPEIN 8," TYPE VideoChars"
TYPEIN 9," Char AS BYTE"
TYPEIN 10," Attr AS BYTE"
TYPEIN 11," END TYPE"
TYPEIN 12,""
TYPEIN 13," DIM ABSOLUTE Vid(2000) AS VideoChars AT &HB800"
TYPEIN 14,""
TYPEIN 15," ARRAY SORT Vid()"
TYPEIN 16," ARRAY SORT B$(0) FOR 10000,COLLATE UCASE,TAGARRAY A(),COLLATE UCASE"
TYPEIN 17,""
TYPEIN 18," ARRAY SCAN B$(0) FOR 10000,COLLATE UCASE,=`TRESPASSERS WIL`, TO i%"
YELLOWBOX 27,10,27,70
HILITE 1:HILITE 2
YELLOWMESSAGE "+DIMension normal arrays just like always"
CWAIT .05
LOLITE 1:LOLITE 2
HILITE 4
YELLOWMESSAGE "+HUGE arrays can be as large as 640K, and any data type"
CWAIT .05
LOLITE 4
HILITE 6
YELLOWMESSAGE "+An ABSOLUTE array can be fixed to any segment boundary"
CWAIT .05
LOLITE 6
HILITE 8:HILITE 9:HILITE 10:HILITE 11:HILITE 12:HILITE 13
YELLOWMESSAGE "+Here is an array of structures which overlap video RAM"
CWAIT .05
LOLITE 8:LOLITE 9:LOLITE 10:LOLITE 11:LOLITE 12:LOLITE 13
HILITE 15:HILITE 16
YELLOWMESSAGE "+Arrays of any data type can be sorted internally"
CWAIT .05
LOLITE 15:LOLITE 16
HILITE 18
YELLOWMESSAGE "+You can also SCAN for, INSERT or DELETE elements"
CWAIT .05
LOLITE 18
END SUB
SUB MAT.TOPIC
' ********************************************************************
' FAST MATH
' ********************************************************************
GETSCREEN2 "IDEMATH.12"
lowerpic "SCRIPT7.PIC"
CWAIT .2
END SUB
SUB MSC.TOPIC
' ********************************************************************
' BASIC FIRSTS
' ********************************************************************
GETSCREEN2 "IDECODE.12"
centerpic "SCRIPT8.PIC"
CWAIT .2
' ********************************************************************
' STRUCTURE
' ********************************************************************
GETSCREEN2 "IDESTRU.12"
lowerpic "SCRIPT9.PIC"
CWAIT .2
' ********************************************************************
' BIT OPERATIONS
' ********************************************************************
GETSCREEN2 "IDECODE.12"
centerpic "SCRIPT10.PIC"
CWAIT .1
END SUB
SUB COM.TOPIC
' ********************************************************************
' COMMUNICATIONS
' ********************************************************************
'GETSCREEN2 "IDE.12"
'centerpic "SCRIPT11.PIC"
'CWAIT .2
getscreen2 "IDE.12"
TYPEIN 1,"' *** bridge PC modem with a terminal in a background task "
TYPEIN 2,"SetPort 4, &H2E0 'Poke any port into BIOS "
TYPEIN 3,"OPEN `COM4:115200,N,8,1,ME,FE,IR5` AS #1 'Open multi-port channel 1 "
TYPEIN 4,"OPEN `COM2:9600,N,8,1,RS,CS` AS #2 'Open ordinary port at 9600 "
TYPEIN 5,"OPEN `CONS:` FOR OUTPUT AS #3 'Open console for ANSI print"
TYPEIN 6,"DO ' "
TYPEIN 7," A$=INKEY$ 'get local key "
TYPEIN 8," IF LOC(#1) THEN A$=INPUT$(LOC(#1),#1) 'get key from terminal "
TYPEIN 9," IF LEN(A$) THEN ' "
TYPEIN 10," A$=REMOVE$(A$,CHR$(10)) 'filter line-feeds "
TYPEIN 11," REPLACE CHR$(13) WITH CHR$(13,10) IN A$ ' "
TYPEIN 12," PRINT #2, A$; 'send key to modem "
TYPEIN 13," END IF ' "
TYPEIN 14," IF LOC(#2) THEN A$=INPUT$(LOC(#2),#2) 'check modem for data "
TYPEIN 15," PRINT #2, A$; 'send it to terminal "
TYPEIN 16," PRINT #3, A$; 'send it to screen "
TYPEIN 17," END IF ' "
TYPEIN 18,"LOOP 'do this forever "
yellowbox 24,9,25,71
HILITE 2
YELLOWMESSAGE "+COM port addresses are taken from the BIOS data area, not"
YELLOWMESSAGE "hard coded. This means you can change them this easily"
CWAIT .12
LOLITE 2
HILITE 3:HILITE 4
YELLOWMESSAGE "+Open multiple ports at the highest speeds, mask and flush"
YELLOWMESSAGE "I/O errors and select the IRQ for nonstandard serial boards"
CWAIT .12
LOLITE 3:LOLITE 4
HILITE 10:HILITE 11
YELLOWMESSAGE "+PowerBASIC's advanced string functions can go further than"
YELLOWMESSAGE "this. Even complex emulation is no longer an assembler chore"
CWAIT .12
END SUB
SUB IDE.TOPIC
' ********************************************************************
' NEW IDE
' ********************************************************************
GETSCREEN2 "IDE.12"
centerpic "SCRIPT12.PIC"
CWAIT .3
GETSCREEN2 "IDEINFO.12"
CPRINT 22,20,7,4,SPACE$(40) ' cover up the "press any key" on the screen
YELLOWBOX 25,9,26,71
YELLOWMESSAGE "+PowerBASIC's compiler info screen outlines compiler"
YELLOWMESSAGE "and executable memory useage"
CWAIT .07
CPRINT 9,16,10,7,"Lines: 1665 Time: 00:04.4"
CPRINT 10,16,10,7,"Stmts: 1507 22200 lines/minute"
YELLOWMESSAGE "+PowerBASIC is well known for its"
YELLOWMESSAGE "blistering-fast compile times"
CWAIT .07
CPRINT 9,16,0,7, "Lines: 1665 Time: 00:04.4"
CPRINT 10,16,0,7, "Stmts: 1507 22200 lines/minute"
CPRINT 17,16,10,7,"Ems: 1216k Total compiler memory: 3232k"
CPRINT 18,16,10,7,"Xms: 1792k Free compiler memory: 3056k"
YELLOWMESSAGE "+PowerBASIC takes advantage of EMS, XMS or virtual disk"
YELLOWMESSAGE "memory for the largest possible compiles in a single step"
CWAIT .07
GETSCREEN2 "IDECOLOR.12"
YELLOWBOX 25,12,25,68
YELLOWMESSAGE "+Development environment colors are fully configurable"
CWAIT .07
GETSCREEN2 "IDEKEYS.12
YELLOWBOX 25,12,25,68
YELLOWMESSAGE "+You may also create and modify I.D.E. hot keys"
CWAIT .05
GETSCREEN2 "IDE.12"
LOWERPIC "PB.PIC"
FOR i%=1 TO 7
GETSCREEN3 "IDE.12"
IDEPIC i%
DELAY 1
NEXT i%
GETSCREEN2 "IDE.12"
CENTERPIC "PB.PIC"
DELAY 1
END SUB
sub greybox(byval y1, byval x1, byval y2,byval x2)
GreyTop=Y1
GreyLeft=X1
GreyBott=Y2
GreyRight=X2
y1=(y1-1)*16-16:y2=(y2-1)*16+16:x1=(x1-1)*8-16:x2=(x2-1)*8+16
fg=15:bg=8:dv=5
line (x1+dv,y1+dv)-(x2,y2),7,bf
for i=0 to dv-1:line(dv+i+x1,(dv+1)+i+y1)-(dv+i+x1,dv-i+y2),fg:next i
for i=0 to dv-1:line(dv-i+x2,(dv+1)+i+y1)-(dv-i+x2,dv-i+y2),bg:next i
for i=0 to dv-1:line(dv+i+x1,dv+i+y1)-(dv-i+x2,dv+i+y1),fg:next i
for i=0 to dv-1:line(dv-i+dv+x1,i+y2+1)-(dv+i-dv+x2,i+y2+1),bg:next i
end sub
FUNCTION FUTURE$(X$)
FOR y%=1 TO LEN(X$)
x%=ASCII(MID$(X$,y%,1))
IF x%>64 AND x%<91 THEN x%=x%-64
Z$=Z$+CHR$(x%)
NEXT y%
FUTURE$=Z$
END FUNCTION
FUNCTION COMPUTER$(X$)
FOR y%=1 TO LEN(X$)
x%=ASCII(MID$(X$,y%,1))
IF x%>64 AND x%<91 THEN x%=x%+63
Z$=Z$+CHR$(x%)
NEXT y%
COMPUTER$=Z$
END FUNCTION
FUNCTION ROMAN$(X$)
FOR y%=1 TO LEN(X$)
x%=ASCII(MID$(X$,y%,1))
IF x%<128 THEN x%=x%+127
Z$=Z$+CHR$(x%)
NEXT y%
ROMAN$=Z$
END FUNCTION
SUB GreyMESSAGE (byval X$)
IF LEFT$(X$,1)="+" THEN gN=0:X$=MID$(X$,2):GreyBOX GreyTop, GreyLeft, GreyBott, GreyRight
IF LEN(X$) THEN C$=LEFT$(X$,2):X$=MID$(X$,3)
IF GreyTop + GN>GreyBott then GN=0
l=(GreyRight-Greyleft)+1
IF LEN(X$)>L THEN X$=LEFT$(X$,L)
X$=SPACE$((L-LEN(X$))\2)+X$
CPRINT GreyTop+GN, GreyLeft, val(c$),7,X$
INCR GN
END SUB
SUB ADD.TOPIC
' ********************************************************************
' THIRD PARTY
' ********************************************************************
SCREEN 12
GETSCREEN2 "IDE.12"
centerpic "SCRIPT13.PIC"
CWAIT .05
greybox 6,4,21,77
OPEN "TOOLS" FOR INPUT AS #1
DO UNTIL EOF(1)
INPUT #1, A$
IF A$="CWAIT" THEN CWAIT .05
GREYMESSAGE A$
A$=INKEY$:IF A$=" " THEN DO:A$=INKEY$:LOOP UNTIL A$<>""
IF A$=CHR$(27) THEN END
IF LEN(A$) THEN EXIT LOOP
LOOP
CWAIT .05
END SUB
SUB HEL.TOPIC
GETSCREEN2 "IDEHELP.12"
delay 1
lowerpic "SCRIPT14.PIC"
CWAIT .2
GETSCREEN2 "IDEHELP.12"
DELAY 1
GETSCREEN2 "IDE.12"
END SUB